package middleware

import (
	"errors"
	"k8s-admin/dao/kubernetes"
	"k8s-admin/global"
	"k8s-admin/utils"

	"github.com/gin-gonic/gin"
	"github.com/patrickmn/go-cache"
)

func K8sCache() gin.HandlerFunc {
	return func(context *gin.Context) {
		cidStr := context.Param("cid")
		_, ok := global.ClientSetCache.Get(cidStr)
		if ok {
			// 缓存存在
			context.Next()
		}
		// 判断是否是存在的cid
		cluster, err := kubernetes.NewK8sCluster().ActiveK8sCluster(cidStr)
		if err != nil {
			global.TPLogger.Error("集群获取失败：", err)
			utils.ReturnContext(context).Failed("失败", err.Error())
			context.Abort()
			return
		}
		// 将集群加入缓存
		configStr := cluster.Text // 这里没有判断cid是否为空
		if configStr == "" {
			//global.TPLogger.Error("cid为空：", errors.New("cid为空"))
			global.TPLogger.Error("err：", errors.New("集群服务状态异常"))
			utils.ReturnContext(context).Failed("失败", errors.New("集群服务状态异常").Error())
			context.Abort()
			return
		}
		dest, _ := utils.DecodeBase64(configStr)
		// 初始化k8s客户端
		set, err := global.NewClientInterface().NewClientSet(dest)
		if err != nil {
			global.TPLogger.Error("集群初始化失败：", err)
			utils.ReturnContext(context).Failed("失败", err.Error())
			context.Abort()
			return
		}
		// 将k8s客户端存入缓存中
		global.ClientSetCache.Set(cidStr, set, cache.NoExpiration)
	}
}
